#include<graphics.h>
#include<conio.h>
#include<stdio.h>
int main()
{
	float wid,hei;//定义窗口相关变量
	wid = 600;//游戏画面宽度
	hei = 400;//游戏画面高度
	initgraph(wid,hei);//窗口大小

	float ball_x,ball_y,radius,gravity,ball_vy;//定义小球相关变量
	radius = 20;//小球半径
	ball_x = wid/4;//小球x位置
	ball_y = hei - radius ;//小球y位置
	ball_vy = 0;//小球初始y速度为0
	gravity = 0.6;//重力加速度

	float rect_left_x,rect_top_y,rect_width,rect_height;//定义方块相关变量
	float rect_vx;//定义方块速度
	rect_height = 100;//方块初始高度
	rect_width = 20;//方块初始宽度
	rect_left_x = wid*3/4;//方块做底点
	rect_top_y = hei - rect_height;
	rect_vx = -3;//方块初始速度为-3

	int score = 0;
	int isBallonFloor = 1;

	while(1)//一直循环
	{
		if(kbhit())//当按键时
		{
			char input = _getch();//获得输入字符
			if(input==' '&&isBallonFloor == 1)//空格起跳
			{
				ball_vy = -16;//给小球一个向上的初速度
				isBallonFloor =0;
			}

		}
		ball_vy = ball_vy + gravity;//根据重力加速度更新小球纵坐标速度
		ball_y = ball_y+ball_vy;//根据小球y方向速度更新小球纵坐标
		if(ball_y>=hei - radius)//防止穿透
		{
			ball_y = 0;//落地速度清0
			ball_y = hei - radius;//避免落到地下
			isBallonFloor =1;

		}

		rect_left_x = rect_left_x+rect_vx;//方块运动
		if(rect_left_x<=0)//方块循环出现
		{
			score = score+1;//得分加1
			rect_left_x = wid;//方块从右边再次出现
			rect_height = rand() % int(hei/4)+hei/4;//设置随机高度
			rect_vx = rand()/float(RAND_MAX)*4-7;//设置方块随机高度
		}

		if((rect_left_x<=ball_x+radius)
			&&(rect_left_x + rect_width>=ball_x-radius)
			&&(hei-rect_height<=ball_y+radius))//当小球与方块碰撞
		{
			score = 0;
			Sleep(100);//减速

		}

	cleardevice();//清空画面


	fillrectangle(rect_left_x,hei-rect_height,rect_left_x+rect_width,hei);//绘制方块
	fillcircle(ball_x,ball_y,radius);//绘制小球


	TCHAR s[20];//定义字符串组
	_stprintf(s,_T("%d"),score);//将score转化为字符串
	settextstyle(40,0,_T("宋体"));//设置文字大小及字体
	outtextxy(50,30,s);//输出得文字


	Sleep(10);//暂停10毫秒
	}



	_getch();
	closegraph();


	return 0;
}





